﻿#if NETFX
using Color = System.Windows.Media.Color;
#elif NETFX_CORE
using Color = Windows.UI.Color;
#endif

using NicoView.Model.Service.Events;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Windows;
using NicoView.Model.Service;
using NicoView.Model.Service.Comments;
using NicoView.ViewModel;
using GalaSoft.MvvmLight.Messaging;


namespace NicoView.ViewModel.Message
{

    
    public abstract class NicoCommentMessage : NicoViewViewModelEventMessageBase
    {
        public NicoCommentMessage(NicoViewCommentViewModel comment):base(comment.BaseViewModel.ApplicationDispatcher)
        {
            Comment = comment;
        }
        public NicoViewCommentViewModel Comment { get; private set; }
    }




    





    public sealed class NicoCommentMultiNoAnchorMessage : NicoCommentMessage
    {
        public NicoCommentMultiNoAnchorMessage(NicoViewCommentViewModel comment, int startNo, int endNo)
            : base(comment) 
        {
            StartNo = startNo;
            EndNo = endNo;
        }
        public int StartNo{get; private set;}

        public int EndNo { get; private set; }
    }

    public sealed class NicoCommentSingleNoAnchorMessage : NicoCommentMessage
    {
        public NicoCommentSingleNoAnchorMessage(NicoViewCommentViewModel comment, int no)
            : base(comment) 
        {
            No = no;
        }

        public int No { get; private set; }
    }


    public sealed class NicoCommentUrlShowMessage : NicoCommentMessage
    {
        public NicoCommentUrlShowMessage(NicoViewCommentViewModel comment, string url)
            : base(comment) 
        {
            this.Url = url;
        }
        public string Url { get; private set; }
    }

    public sealed class NicoCommentVideoShowMessage : NicoCommentMessage
    {
        public NicoCommentVideoShowMessage(NicoViewCommentViewModel comment, string videoId)
            : base(comment)
        {
            VideoId = videoId;
        }

        public string VideoId { get; private set; }
    }

    public sealed class NicoCommentLiveShowMessage : NicoCommentMessage
    {
        public NicoCommentLiveShowMessage(NicoViewCommentViewModel comment, string liveId)
            : base(comment)
        {
            LiveId = liveId;
        }

        public string LiveId { get; private set; }
    }

    public sealed class NicoCommentCommunityShowMessage : NicoCommentMessage
    {
        public NicoCommentCommunityShowMessage(NicoViewCommentViewModel comment, string communityId)
            : base(comment)
        {
            CommunityId = communityId;
        }

        public string CommunityId { get; private set; }
    }

    public sealed class NicoCommentChannelShowMessage : NicoCommentMessage
    {
        public NicoCommentChannelShowMessage(NicoViewCommentViewModel comment, string channelId)
            :base(comment)
        {
            ChannelId = channelId;
        }

        public string ChannelId;
    }

    public sealed class NicoCommentReplyRequestMessage : NicoCommentMessage
    {
        public NicoCommentReplyRequestMessage(NicoViewCommentViewModel comment) : base(comment) { }
    }

    public sealed class NicoNewCommentClientMessage : MessageBase
    {
        public NicoNewCommentClientMessage(INicoCommentClient commentClient)
        {
            CommentClient = commentClient;
        }

        public INicoCommentClient CommentClient { get; private set; }
    }
}
